/*
 * CommunicationRobotPiezas.h
 *
 *  Created on: 16/11/2013
 *      Author: gonzalo
 */

#ifndef COMMUNICATIONROBOTPIEZAS_H_
#define COMMUNICATIONROBOTPIEZAS_H_

#include "MiddlewareCommon.h"
#include "../IPC/Semaphore.h"
#include "../IPC/SharedMemoryInterface.h"

typedef int EstadoRobotPiezas;

namespace middleware {

class CommunicationRobotPiezas {
public:
	CommunicationRobotPiezas(char key);
	virtual ~CommunicationRobotPiezas();
	void despertarHayPieza();
	void despertarHayProductoCinta();
	void esperarPieza();
	void esperarCinta();
	virtual std::string getNombre() = 0;
	static void create();
	static void destroy();
	char getKey();
protected:
	char key;
	ipc::Semaphore semRobot;
	ipc::SharedMemoryInterface<EstadoRobotPiezas> shMemEstado;
	void esperar(EstadoRobotPiezas estado);
	void despertar(EstadoRobotPiezas estado);
	static char getAltKey(char key);
	static const int ROBOT_ESPERANDO_PIEZA;
	static const int ROBOT_ESPERANDO_CINTA;
	static const int ROBOT_ACTIVO;
	static const int ROBOT_INACTIVO;
};

} /* namespace middleware */
#endif /* COMMUNICATIONROBOTPIEZAS_H_ */
